unsigned int timer_seed = 0x1234;

void timer0_init()
{
    // Timer0 模式1
    TMOD &= 0xF0;
    TMOD |= 0x01;

    // 启动Timer0，启动后TH0和TL0开始计数
    TR0 = 1;
    // 使能中断
    ET0 = 1;
    // 开总中断
    EA = 1;
    // Timer0中断高优先级，和串口同时开启的时候，需要设置
    // 如果不设置，在timer0_ISR中调用printf会卡住
    PT0 = 1;
}

void timer0_isr_on()
{
    ET0 = 1;
}

void timer0_isr_off()
{
    ET0 = 0;
}

unsigned int timer_rand()
{
    timer_seed = (timer_seed * 12345 + 67890) % 65535;
    return timer_seed;
}

unsigned int get_timer0_value()
{
    unsigned char high, low;
    do
    {
        high = TH0;
        low = TL0;
        // 确保取出高低位的这两个值过程中不存在溢出的情况
    } while (high != TH0);
    // 高低位拼接，注意类型提升，虽然是char类型，移位运算进行类型提升。运算返回结果是uint类型
    return (high << 8) | low;
}